Hoje falarei sobre alguns recursos interessantes do gerenciador de templates Smarty (http://www.smarty.net).
Assumo que o leitor já conhece a sintaxe básica do Smarty, como rodar um template, qual estrutura de diretórios utilizar e como alterar o include_path para facilitar as configurações do gerenciador. Se não souber, veja esta seção: http://www.smarty.net/manual/pt_BR/installation.php
1. Formatação de Datas
2. Definindo Valores Padrões
3. Formatando Números
4. Truncando Textos
5. Salvando textos em Variáveis
6. Loops (Estruturas de Repetição)
7. Contadores
8. Alternando Valores em um Loop
9. Populando Elemenos de Formulários
10. Gerando Tabelas HTML
11. Escondendo dos Bots de Spam Endereços de E-Mail
1. Formatação de Datas
O Smarty possui um modificador de variável chamado date_format. Ele se assemelha à função strftime(), do PHP.
index.php
1 | $Smarty->assign('data', '2009-05-15'); |
index.tpl
1 2 3 | {$data} {$data|date_format} {$data|date_format:"%d/%m/%Y"} |
Saída:
2009-05-15 May 15, 2009 15/05/2009
Veja mais detalhes e todos os especificadores de formatação em http://www.smarty.net/manual/pt_BR/language.modifier.date.format.php
2. Definindo Valores Padrões
Para verificar se um valor é diferente de NULL (vazio), costuma-se fazer uma condicional (if). Por exemplko:
1 | <img src="{if $foto != ''}{$foto}{else}semfoto.gif{/if}" /> |
Porém, isto pode ser simplificado para:
1 | <img src="{$foto|default:"semfoto.gif"}" /> |
Mais informações: http://www.smarty.net/manual/pt_BR/language.modifier.default.php
3. Formatando Números
Podemos usar string_format para formatar um número, usando as mesmas regras da função printf().
index.php
1 | $Smarty->assign('numero', 42.757428942); |
index.tpl
1 2 3 4 5 | {$numero} {$numero|string_format:"%.2f"} {$numero|string_format:"%07.3f"} {$numero|string_format:"%d"} {$numero|string_format:"%05d"} |
Saída:
42.757428942 42.76 042.757 42 00042
Mais detalhes: http://www.smarty.net/manual/pt_BR/language.modifier.string.format.php
4. Truncando Textos
Muitas vezes deseja-se truncar um texto para uma certa quantidade de caracteres ou palavras. Geralmente usa-se substr(). O inconveniente dessa função é que ela corta palavras. Há como contornar isso somente com PHP, mas o Smarty facilita ainda mais nesse caso.
index.php
1 | $Smarty->assign('texto', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi in enim est. Nam placerat adipiscing pretium. Sed at est odio. Vestibulum metus sapien, tincidunt et viverra eget, bibendum molestie justo.'); |
index.tpl
1 2 3 4 5 | {$texto} {$texto|truncate} {$texto|truncate:87} {$texto|truncate:87:"(continua)"} {$texto|truncate:87:"...":true} |
Saída:
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi in enim est. Nam placerat adipiscing pretium. Sed at est odio. Vestibulum metus sapien, tincidunt et viverra eget, bibendum molestie justo. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi in enim est.... Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi in enim est. Nam... Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi in enim est.(continua) Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi in enim est. Nam plac...
Mais informações http://www.smarty.net/manual/pt_BR/language.modifier.truncate.php
5. Salvando textos em Variáveis
É possível salvar um texto gerado pelo Smarty em uma variável. Uma aplicação para isso é numa paginação, por exemplo, onde a barra com os números das páginas é exibida mais de uma vez.
index.php
1 | $Smarty->assign('paginas', array(1, 2, 3, 4, 5, 6)); |
index.tpl
1 2 3 4 5 6 7 8 9 10 11 12 | {capture name="barra_pag"} {foreach from=$paginas item=i} {$i} {/foreach} {/capture} {$smarty.capture.barra_pag} conteúdo da página {$smarty.capture.barra_pag} |
Saída:
1 2 3 4 5 6 conteúdo da página 1 2 3 4 5 6
[cta id=’1240′]
6. Loops (Estruturas de Repetição)
As duas estruturas de repetição do Smarty são foreach e section. A principal diferença entra as duas é que section permite modificar o incremento do contador, como num loop while.
index.php
1 | $Smarty->assign('array', range(1, 20)); |
index.tpl
1 2 3 4 5 6 7 8 9 10 11 12 | {foreach from=$array item=i key=k} {$k} => {$i} {/foreach} {section name=cont loop=$array step=2} {$array[cont]} {/section} {section name=cont loop=$array step=2 start=5} {$array[cont]} {/section} |
Saída:
0 => 1 1 => 2 2 => 3 3 => 4 4 => 5 5 => 6 6 => 7 7 => 8 8 => 9 9 => 10 10 => 11 11 => 12 12 => 13 13 => 14 14 => 15 15 => 16 16 => 17 17 => 18 18 => 19 19 => 20 1 3 5 7 9 11 13 15 17 19 6 8 10 12 14 16 18 20
Mais informações:
http://www.smarty.net/manual/pt_BR/language.function.section.php
http://www.smarty.net/manual/pt_BR/language.function.foreach.php
7. Contadores
O Smarty tem um recurso próprio para usar contadores dentro de templates. É o counter.
Este exemplo não requer a exibição do script PHP. Basta dar um display() no tenplate, não sendo necessário atribuir valor a variáveis de templates.
index.tpl
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | {counter start=0 skip=1} {counter} {counter} {counter start=7 skip=4} {counter} {counter} {counter} {counter start=77 skip=7 direction=down} {counter} {counter} {counter} {counter} |
Saída:
0 1 2 7 11 15 19 77 70 63 56 49
8. Alternando Valores em um Loop
Uma dúvida muito frequente em fóruns é como alternar cores de linhas de tabelas. Há diversas formas de solucionar esse problema apenas com PHP, mas, novamentem o Smarty facilita o trabalho. Usaremos a função cycle.
index.php
1 | $Smarty->assign('array', range(1, 10)); |
index.tpl
1 2 3 4 5 6 7 | <table border="1" width="40" cellpadding="2" cellspacing="1"> {foreach from=$array item=i} <tr style="background: {cycle values="#ccc,#666"}"> <td>{$i}</td> </tr> {/foreach} </table> |
Saída:
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
9. Populando Elemenos de Formulários
Há três elementos de formulário que geralmente são populados com valores personalizados, geralmente provenientes de bases de dados: checkboxes, radios e options. O Smarty possui funções específicas para esses três elementos.
Populando checkboxes
index.php
1 2 3 | $Smarty->assign('check_id', array('v1', 'v2', 'v3', 'v4', 'v5')); $Smarty->assign('check_value', array('valor 1', 'valor 2', 'valor 3', 'valor 4', 'valor 5')); $Smarty->assign('check_selected', 'v3'); |
index.tpl
1 | {html_checkboxes name=opcoes values=$check_id output=$check_value selected=$check_selected} |
Populando radios
index.php
1 2 3 | $Smarty->assign('radio_id', array('v1', 'v2', 'v3', 'v4', 'v5')); $Smarty->assign('radio_value', array('valor 1', 'valor 2', 'valor 3', 'valor 4', 'valor 5')); $Smarty->assign('radio_selected', 'v3'); |
index.tpl
1 | {html_radios name=opcoes values=$radio_id output=$radio_value checked=$radio_selected} |
Populando options
index.php
1 2 3 | $Smarty->assign('op_id', array('v1', 'v2', 'v3', 'v4', 'v5')); $Smarty->assign('op_value', array('valor 1', 'valor 2', 'valor 3', 'valor 4', 'valor 5')); $Smarty->assign('op_selected', 'v3'); |
index.tpl
1 2 3 | <select name="opcoes"> {html_options values=$op_id output=$op_value selected=$op_selected} </select> |
Saídas das três funcções:
Há dois casos particulares para a criação de options: para data e para hora. O Smarty também tem funções específicas para isso.
Para esse caso, não é necessário definir variáveis no script PHP. Basta dar um display() no template.
index.tpl
1 | {html_select_date start_year="-100" month_format="%m" field_order="DMY" field_separator="/"} |
Saída:
//
html_select_time fica para vocês. =P
Mais informações:
http://www.smarty.net/manual/pt_BR/language.function.html.checkboxes.php
http://www.smarty.net/manual/pt_BR/language.function.html.radios.php
http://www.smarty.net/manual/pt_BR/language.function.html.options.php
http://www.smarty.net/manual/pt_BR/language.function.html.select.date.php
http://www.smarty.net/manual/pt_BR/language.function.html.select.time.php
10. Gerando Tabelas HTML
É possível gerar tabelas HTML a partir de arrays usando html_table.
index.php
1 | $Smarty->assign('info', range(1, 30)); |
index.tpl
1 | {html_table loop=$info cols=5 table_attr='border="2"' tr_attr='style="background: #ccc"'} |
Mais informações:
http://www.smarty.net/manual/pt_BR/language.function.html.table.php
11. Escondendo dos Bots de Spam Endereços de E-Mail
Colocar endereços de e-mail em páginas HTML acarreta uma grande dor de cabeça: os bots de spam logo aparecem para indexar o e-mail em suas listas de destinatários. Uma boa maneira de esconder dos bots os endereços é codificando-os em hexadecimal, por exemplo, ou em JavaScript. O Smarty possui a função mailto.
index.tpl
1 2 | {mailto address="[email protected]"} {mailto address="[email protected]" encode="hex"} |
Saída:
[email protected] email@site.com
Descobri esse recurso recentemente. Até então eu usava um programa em C que convertia um caractere em hexadecimal. Tinha que fazer isso para cada e-mail que colocasse no site. Agora não preciso mais. =D
Roberto Beraldo
Latest posts by Roberto Beraldo (see all)
- Não Tenha Preguiça de Ler! - 25/04/2016
- Como Atualizar Scripts PHP de MySQL Para MySQLi - 29/10/2015
- Como usar PDO com banco de dados MySQL - 10/09/2015